﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Recursos.Model
{
    public class SedeModel
    {
        public IList<Sede> CargarSedes()
        {
            var datacontext = new DataClassesRecursosDataContext();
            var sedes = new Repository<Sede>(datacontext);
            return sedes.GetAll().ToList();
        }

        public bool ComprobarSedes(string nombre)
        {
            bool conflicto = false;
            var datacontext = new DataClassesRecursosDataContext();
            var sedes = new Repository<Sede>(datacontext);
            var resultado = sedes.SearchOne(s => s.Nombre == nombre);
            if (resultado != null)
                conflicto=true;
            return conflicto;
        }


        public bool EliminarSede(int idsede)
        {
            bool conflicto = false;
            var datacontext = new DataClassesRecursosDataContext();
            var sedes = new Repository<Sede>(datacontext);
            var espaciospendientes = BuscarEspaciosSede(idsede);
            if (espaciospendientes !=0)
                return true;
            sedes.Delete(idsede);
            datacontext.SubmitChanges();
            return conflicto;
        }

        public int BuscarEspaciosSede(int idsede)
        {
            bool conflicto = false;
            var datacontext = new DataClassesRecursosDataContext();
            var espacios = new Repository<Espacio>(datacontext);
            var resultado = espacios.SearchFor(s => s.IdSede == idsede && s.Borrado == false);

            return resultado.Count();
        }



        public bool ActualizarSede(int idsede,string nombre, string direccion, int iddistrito)
        {
            bool conflicto = false;
            var datacontext = new DataClassesRecursosDataContext();
            var sedes = new Repository<Sede>(datacontext);
           
            var resultado = sedes.SearchFor(s => s.id == idsede && s.Borrado == false);
            try
            {
                var idsedebd = sedes.SearchOne(s => s.Nombre == nombre && s.Borrado == false).id;
                if (idsedebd == idsede)
                {
                    var sede = sedes.GetById(idsede);
                    sede.IdDistrito=iddistrito;
                    sede.Nombre=nombre;
                    sede.DireccionExacta=direccion;
                    datacontext.SubmitChanges();
                    return true;
                }
                else
                    return false;
            }
            catch(Exception)
            {
                    var sede = sedes.GetById(idsede);
                    sede.IdDistrito=iddistrito;
                    sede.Nombre=nombre;
                    sede.DireccionExacta=direccion;
                    return true;
            }
           
        }





        public Sede CargarPorId(int id)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var sede = new Repository<Sede>(datacontext);
            return sede.GetById(id);
        }
        public bool CrearSedes(string nombre, string direccionexacta, int distrito)
        {
            bool efectuado = true;
            var datacontext = new DataClassesRecursosDataContext();
            var sedes = new Repository<Sede>(datacontext);
            var sede = new Sede();
            try
            {
                bool conflicto = ComprobarSedes(nombre);
                if (conflicto == true)
                    efectuado = false;
                else
                {
                    sede.Borrado = false;
                    sede.DireccionExacta = direccionexacta;
                    sede.IdDistrito = distrito;
                    sedes.Insert(sede);
                    efectuado = true;
                    datacontext.SubmitChanges();
                }
            }
            catch (Exception)
            {
                sede.Borrado = false;
                sede.Nombre = nombre;
                sede.DireccionExacta = direccionexacta;
                sede.IdDistrito = distrito;
                sedes.Insert(sede);
                efectuado = true;
                datacontext.SubmitChanges();
            
            }
            return efectuado;
        }


    }
}